<?php

class Novedades extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->datosusuario = $this->authentication->getDataLogged();
        $this->datoscausa = $this->session->userdata('causa');
        $this->load->model('m_novedad', 'novedad');
        $this->load->model('m_documento', 'documento');
        $this->load->model('m_documento_x_nota', 'documento_x_nota');

        $causa = $this->session->userdata('causa');
        $this->authentication->puedeVerCausa($causa['id']);

        if ($this->datosusuario['tipoId'] == 1) {
            $this->redirect = 'causas/notas/';
        } else {
            $this->redirect = 'causas/novedades/';
        }

        $this->titulo = 'Novedad';
        $this->titulos = 'Novedades';
    }

    /**
     * Listado de las novedades. Por ahora las q quiera listar, ya filtraremos...
     *
     * @return void
     */
    function index() {
        $data = array(
            'titulo' => 'Listado de Novedades',
            'datosusuario' => $this->datosusuario,
            'datoscausa' => $this->datoscausa,
            'listado' => $this->novedad->getListNoAdmin($this->datoscausa['id']),
            'seleccionar' => 'causas',
        );
        $this->load->view('templates/header', $data);
        $this->load->view('templates/topbar');
        $this->load->view('causas/leftbarcausa');
        $this->load->view('novedades/index', $data);
        $this->load->view('templates/footer');
    }

    /**
     * Crea un nuevo usuario.
     *
     * @return void
     */
    function nuevo() {
        $this->form_validation->set_rules($this->novedad->getValidacion());
        if ($this->form_validation->run() === FALSE) {
            $documentos = array();

            if (isset($_POST['submit'])) {
                set_message(array('3' => validation_errors()));
                $novedad = $_POST;

                if (isset($_POST['documento'])) {
                    foreach ($_POST['documento'] as $id) {
                        $this->documento->get($id);
                        $documentos[$id]->id = $this->documento->id;
                        $documentos[$id]->nombre = $this->documento->nombre;
                        $documentos[$id]->descripcion = $this->documento->descripcion;
                    }
                }
            } else {
                $novedad = $this->novedad->valoresPorDefecto();
            }

            $data = array(
                'titulo' => 'Nueva ' . $this->titulo,
                'datosusuario' => $this->datosusuario,
                'datoscausa' => $this->datoscausa,
                'novedad' => $novedad,
                'documentos' => $documentos,
                'pathdocumento' => PATH_UPLOAD . $this->datoscausa['id'] . '/',
                'seleccionar' => 'causas',
            );

            $this->load->view('templates/header', $data);
            $this->load->view('templates/topbar');
            $this->load->view('causas/leftbarcausa');
            $this->load->view('novedades/form');
            $this->load->view('templates/footer');
        } else {
            $this->load->model('m_logs', 'logs');
            $_POST['fecha'] = normal_to_database_date($_POST ['fecha']);

            $this->novedad->setAttributes($this->input);
            $this->novedad->causaId = $this->datoscausa['id'];
            $this->novedad->usuarioId = $this->datosusuario['id'];
            $this->novedad->id = null;
            $this->novedad->save();
            $this->novedad->logs('nuevo', $this->datosusuario['id'], $this->logs);

            if (isset($_POST['documento'])) {
                foreach ($_POST['documento'] as $id) {
                    $this->documento_x_nota->documentoId = $id;
                    $this->documento_x_nota->notaId = $this->novedad->id;
                    $this->documento_x_nota->id = null;
                    $this->documento_x_nota->save();
                }
            }

            set_message(array('info' => 'Se ha agregado una nueva novedad a la causa: "' . $this->novedad->titulo . '".'));

            redirect($this->redirect);
        }
    }

    /**
     * Edita un usuario.
     *
     * @param integer $id El ID del usuario para editar.
     * @return void
     */
    function editar($id = '') {
        if ($id == '')
            redirect($this->redirect);

        if ($this->novedad->get((int) $id)) {
            if (!$this->novedad->puedeEditar($this->datosusuario['tipoId']))
                redirect($this->redirect);

            $this->form_validation->set_rules($this->novedad->getValidacion());
            if ($this->form_validation->run() === FALSE) {
                $documentos = array();

                if (isset($_POST['submit'])) {
                    set_message(array('3' => validation_errors()));
                    $novedad = $_POST;

                    if (isset($_POST['documento'])) {
                        foreach ($_POST['documento'] as $id) {
                            $this->documento->get($id);
                            $documentos[$id]->id = $this->documento->id;
                            $documentos[$id]->nombre = $this->documento->nombre;
                            $documentos[$id]->descripcion = $this->documento->descripcion;
                        }
                    }
                } else {
                    $this->novedad->fecha = database_to_normal_date($this->novedad->fecha);
                    $novedad = $this->novedad->doArray();

                    $documentos_x_notas = $this->documento_x_nota->getList(array('notaId' => $this->novedad->id));
                    if (isset($documentos_x_notas)) {
                        foreach ($documentos_x_notas as $documento_x_nota) {
                            $this->documento->get($documento_x_nota->documentoId);
                            $documentos[$this->documento->id]->id = $this->documento->id;
                            $documentos[$this->documento->id]->nombre = $this->documento->nombre;
                            $documentos[$this->documento->id]->descripcion = $this->documento->descripcion;
                        }
                    }
                }

                $data = array(
                    'titulo' => 'Editar ' . $this->titulo,
                    'datosusuario' => $this->datosusuario,
                    'datoscausa' => $this->datoscausa,
                    'novedad' => $novedad,
                    'pathdocumento' => PATH_UPLOAD . $this->datoscausa['id'] . '/',
                    'documentos' => $documentos,
                    'seleccionar' => 'causas',
                    'id' => $id,
                );

                $this->load->view('templates/header', $data);
                $this->load->view('templates/topbar');
                $this->load->view('causas/leftbarcausa');
                $this->load->view('novedades/form');
                $this->load->view('templates/footer');
            } else {
                $this->load->model('m_logs', 'logs');
                $_POST['fecha'] = normal_to_database_date($_POST ['fecha']);
                $_POST['id'] = $this->novedad->id;
                $_POST['usuarioId'] = $this->novedad->usuarioId;

                $this->novedad->setAttributes($this->input);
                $this->novedad->causaId = $this->datoscausa['id'];
                $this->novedad->save();
                $this->novedad->logs('actualizar', $this->datosusuario['id'], $this->logs);

                $documentos_x_notas = $this->documento_x_nota->getList(array('notaId' => $this->novedad->id));
                $documentos_adjuntos = array();
                if (isset($documentos_x_notas)) {
                    foreach ($documentos_x_notas as $documento_x_nota) {
                        $documentos_adjuntos[] = $documento_x_nota->documentoId;
                    }
                }

                if (isset($_POST['documento'])) {
                    foreach ($_POST['documento'] as $id) {
                        if (!in_array($id, $documentos_adjuntos)) {
                            $this->documento_x_nota->documentoId = $id;
                            $this->documento_x_nota->notaId = $this->novedad->id;
                            $this->documento_x_nota->id = null;
                            $this->documento_x_nota->save();
                        }
                    }
                }
                set_message(array('info' => 'Se ha agregado editado la novedad de la causa: "' . $this->novedad->titulo . '".'));

                redirect($this->redirect);
            }
        } else {
            redirect($this->redirect);
        }
    }

    /**
     * Elimina un usuario.
     *
     * @param integer $id El ID del usuario a eliminar.
     * @return void
     */
    function eliminar($id = '') {
        if ($id == '')
            redirect($this->redirect);

        if ($this->novedad->get((int) $id)) {
            $this->load->model('m_logs', 'logs');
            $documentos_x_notas = $this->documento_x_nota->getList(array('notaId' => $this->novedad->id));
            if (isset($documentos_x_notas)) {
                foreach ($documentos_x_notas as $documento_x_nota) {
                    $this->documento_x_nota->get($documento_x_nota->id);
                    $this->documento_x_nota->delete();
                }
            }

            $this->novedad->logs('eliminar', $this->datosusuario['id'], $this->logs);
            $this->novedad->delete();
            set_message(array('1' => 'Se ha eliminado la novedad de la causa.'));
        }

        redirect($this->redirect);
    }

    public function eliminar_documento() {

        if ($this->documento_x_nota->getPorDocumentoId((int) $_GET['id'])) {
            $this->documento_x_nota->delete();
        }
    }

    /**
     * Listado de las novedades. Por ahora las q quiera listar, ya filtraremos...
     *
     * @return void
     */
    function index_notas_admin() {

        $data = array(
            'titulo' => 'Listado de ' . $this->titulos,
            'datosusuario' => $this->datosusuario,
            'datoscausa' => $this->datoscausa,
            'listado' => $this->novedad->getListAdmin($this->datoscausa['id']),
            'seleccionar' => 'causas',
        );
        $this->load->view('templates/header', $data);
        $this->load->view('templates/topbar');
        $this->load->view('causas/leftbarcausa');
        $this->load->view('novedades/index_admin', $data);
        $this->load->view('templates/footer');
    }

}
